Parcial 2 - Simulación computacional Juan David Vargas Mora - 160002934


In [9]:
import numpy as np
import matplotlib.pyplot as plt
import math
from matplotlib.pylab import hist, show
from scipy.integrate import quad

funacu=[]
x=[]
px=[]

def congruencial(n):
    
    lastXn = 7897857
    a = lastXn*7
    b = a + 98756465
    m = 900217
    rList = []
    for i in range(n):
        Xn = float((a*lastXn + b)% m)
        lastXn = Xn
        random = float(Xn/m)
        rList.append(random)
    return rList

def normal(miu,sigma,n,clientes):
    normal=[]

    for i in range(n):
        total=miu+(sigma*(2**0.5))*funcErrorInv((2.0*(congruencial(n)[i]))-1.0)
        normal.append(total)
        print 'Tiempo de servicio para cliente ',i,': ',total,' minutos'        
    return normal

def poisson(l):
    acumulado=0.0
    for i in range(70):
        pxi=(math.exp((-1)*(l))*(l**i))/(math.factorial(i)+0.0)
        x.append(i)
        px.append(pxi)
        acumulado+=pxi
        funacu.append(acumulado)
        
def funcErrorInv(x):
    sig=-1.0;
    w=math.log(1-(x**2));
    term1=18.75537-(2.47197*w)+0.25*(w**2)
    if(x>0.0):
        sig=1
        if(x<0.0):
            sig=-1
            if(x==0.0):
                sig=0          
    total=sig*(((term1)**0.5) - 4.33074 - 0.5*w)**0.5
    return total

def simular(n):
    
    metodo=congruencial(n)
    tiempoAcumSer=0.0
    numClientesLlegada=[]
    numClientesAtendidos=[]
    numClientesCola=[]
    numClientesenServ=[]
    tiempoEspera=[]
    tiempoLlegada=[]
    tll=[]
    tsal=[]
    tiempoServicio=[]
    totalClientes=0
    temp=0.0
    acumLleg=0.0
    acumAtend=0.0
    promedio=0.0
    funacu.append(0)
    l=input('Lambda: ')
    miu=input('Miu: ')
    sigma=input('Sigma: ')
    poisson(l)
    print 'No. Clientes llegando/hora: '
    for i in range(len(metodo)):
        print 'No. Clientes en ',(i+1),' horas: '
        for j in range(len(funacu)-1):
            if(metodo[i]>funacu[j] and metodo[i]<=funacu[j+1]):
                print x[j],' Clientes'
                numClientesLlegada.append(x[j])
                totalClientes=totalClientes+x[j]
    print 'Tiempos de servicio'
    arreNormal=normal(miu,sigma,totalClientes,n)
    inicio=0
    fin=0
    for i in range(len(numClientesLlegada)):
        fin=inicio+numClientesLlegada[i]
        print 'Tiempo promedio de servicio en ',(i+1),' horas: '
        for j in range(inicio,fin):
            promedio=promedio+arreNormal[j]
        inicio=fin
        tiempoServicio.append(promedio/numClientesLlegada[i])
        print tiempoServicio[i],' minutos'
        promedio=0.0
    for i in range(len(arreNormal)): 
        tiempoAcumSer=tiempoAcumSer+arreNormal[i]
    tiempoAcumSer=0.0
    cantClientesAten=-1;
    horas=1;
    for i in range(len(arreNormal)): 
        print 'tiempo acumulado servicio por hora: ',tiempoAcumSer
        if(tiempoAcumSer<60.0):
            cantClientesAten=cantClientesAten+1
            tiempoAcumSer=tiempoAcumSer+arreNormal[i]
        else:
            dif=tiempoAcumSer-60.0
            tiempoAcumSer=dif
            print 'Clientes atendidos en ',horas,' horas: ',cantClientesAten
            numClientesAtendidos.append(cantClientesAten)
            cantClientesAten=0
            horas=horas+1
    print 'Clientes atendidos en ',(horas),' horas'
    print cantClientesAten 
    numClientesAtendidos.append(cantClientesAten)
    for i in range(len(numClientesLlegadan)):
        print 'Tiempo promedio de llegadas en ',(i+1),' horas: ',((1.0/numClientesLlegada[i])*60.0),' minutos'
        tiempoLlegada.append((1.0/numClientesLlegada[i])*60.0)
        acumLleg=acumLleg+numClientesLlegada[i]
        acumAtend=acumAtend+numClientesAtendidos[i]
        if(acumLleg>acumAtend):
            numClientesenServ.append(1.0)
        else:
            numClientesenServ.append(0.0)
        print 'Clientes en cola en ',(i+1),' horas: ',(acumLleg-(acumAtend+numClientesenServ[i]))
        print 'Clientes en servicio en ',(i+1),' horas: ',(numClientesenServ[i])
    llegadaAcum=0.0
    for i in range (len(numClientesLlegadan)):
        llegadaAcum=llegadaAcum+tiempoLlegada[i]
        tll.append(llegadaAcum)
    
def main():
    
    simular(10)
    
main()


Lambda: 10
Miu: 10
Sigma: .1
No. Clientes llegando/hora: 
No. Clientes en  1  horas: 
12  Clientes
No. Clientes en  2  horas: 
8  Clientes
No. Clientes en  3  horas: 
8  Clientes
No. Clientes en  4  horas: 
10  Clientes
No. Clientes en  5  horas: 
14  Clientes
No. Clientes en  6  horas: 
11  Clientes
No. Clientes en  7  horas: 
10  Clientes
No. Clientes en  8  horas: 
8  Clientes
No. Clientes en  9  horas: 
14  Clientes
No. Clientes en  10  horas: 
7  Clientes
Tiempos de servicio
Tiempo de servicio para cliente  0 :  10.061325638  minutos
Tiempo de servicio para cliente  1 :  9.9228570362  minutos
Tiempo de servicio para cliente  2 :  9.95435647449  minutos
Tiempo de servicio para cliente  3 :  10.0063309535  minutos
Tiempo de servicio para cliente  4 :  10.1172665455  minutos
Tiempo de servicio para cliente  5 :  10.0298540932  minutos
Tiempo de servicio para cliente  6 :  10.00261265  minutos
Tiempo de servicio para cliente  7 :  9.95588042651  minutos
Tiempo de servicio para cliente  8 :  10.1266923768  minutos
Tiempo de servicio para cliente  9 :  9.91012850272  minutos
Tiempo de servicio para cliente  10 :  10.0103991814  minutos
Tiempo de servicio para cliente  11 :  9.99852959546  minutos
Tiempo de servicio para cliente  12 :  10.0527551841  minutos
Tiempo de servicio para cliente  13 :  10.1273508341  minutos
Tiempo de servicio para cliente  14 :  9.94172168609  minutos
Tiempo de servicio para cliente  15 :  10.0470098384  minutos
Tiempo de servicio para cliente  16 :  10.0419158427  minutos
Tiempo de servicio para cliente  17 :  9.90606345483  minutos
Tiempo de servicio para cliente  18 :  10.0986395899  minutos
Tiempo de servicio para cliente  19 :  10.0771943516  minutos
Tiempo de servicio para cliente  20 :  9.99611807992  minutos
Tiempo de servicio para cliente  21 :  9.91549037093  minutos
Tiempo de servicio para cliente  22 :  9.94243476275  minutos
Tiempo de servicio para cliente  23 :  10.0704516948  minutos
Tiempo de servicio para cliente  24 :  10.0871407429  minutos
Tiempo de servicio para cliente  25 :  10.0074931284  minutos
Tiempo de servicio para cliente  26 :  10.1768550847  minutos
Tiempo de servicio para cliente  27 :  9.76343883258  minutos
Tiempo de servicio para cliente  28 :  9.8751519956  minutos
Tiempo de servicio para cliente  29 :  9.79516206942  minutos
Tiempo de servicio para cliente  30 :  10.0802741206  minutos
Tiempo de servicio para cliente  31 :  9.85861939853  minutos
Tiempo de servicio para cliente  32 :  9.98121420174  minutos
Tiempo de servicio para cliente  33 :  9.98131959962  minutos
Tiempo de servicio para cliente  34 :  9.83602329743  minutos
Tiempo de servicio para cliente  35 :  9.97924816422  minutos
Tiempo de servicio para cliente  36 :  10.0288224264  minutos
Tiempo de servicio para cliente  37 :  10.1186276572  minutos
Tiempo de servicio para cliente  38 :  10.1034509105  minutos
Tiempo de servicio para cliente  39 :  10.0480877919  minutos
Tiempo de servicio para cliente  40 :  9.94679457472  minutos
Tiempo de servicio para cliente  41 :  9.87807341193  minutos
Tiempo de servicio para cliente  42 :  10.0873509958  minutos
Tiempo de servicio para cliente  43 :  10.031075929  minutos
Tiempo de servicio para cliente  44 :  9.98459005386  minutos
Tiempo de servicio para cliente  45 :  9.97705308726  minutos
Tiempo de servicio para cliente  46 :  10.01906753  minutos
Tiempo de servicio para cliente  47 :  9.94681254089  minutos
Tiempo de servicio para cliente  48 :  9.92861356641  minutos
Tiempo de servicio para cliente  49 :  10.0185937179  minutos
Tiempo de servicio para cliente  50 :  10.0888151289  minutos
Tiempo de servicio para cliente  51 :  10.0477700977  minutos
Tiempo de servicio para cliente  52 :  9.94971933383  minutos
Tiempo de servicio para cliente  53 :  10.0378767805  minutos
Tiempo de servicio para cliente  54 :  10.1093075266  minutos
Tiempo de servicio para cliente  55 :  9.78607435527  minutos
Tiempo de servicio para cliente  56 :  10.0318547877  minutos
Tiempo de servicio para cliente  57 :  10.0716439504  minutos
Tiempo de servicio para cliente  58 :  9.95987774135  minutos
Tiempo de servicio para cliente  59 :  9.93234062148  minutos
Tiempo de servicio para cliente  60 :  9.99203516707  minutos
Tiempo de servicio para cliente  61 :  10.1547906893  minutos
Tiempo de servicio para cliente  62 :  9.98963886719  minutos
Tiempo de servicio para cliente  63 :  10.1289429247  minutos
Tiempo de servicio para cliente  64 :  10.0594287783  minutos
Tiempo de servicio para cliente  65 :  9.91809467082  minutos
Tiempo de servicio para cliente  66 :  9.85567374737  minutos
Tiempo de servicio para cliente  67 :  9.88329079405  minutos
Tiempo de servicio para cliente  68 :  10.0563755025  minutos
Tiempo de servicio para cliente  69 :  10.0171010408  minutos
Tiempo de servicio para cliente  70 :  10.0185690755  minutos
Tiempo de servicio para cliente  71 :  10.1197449802  minutos
Tiempo de servicio para cliente  72 :  10.0353074679  minutos
Tiempo de servicio para cliente  73 :  9.96160932884  minutos
Tiempo de servicio para cliente  74 :  10.0564359089  minutos
Tiempo de servicio para cliente  75 :  10.1840548189  minutos
Tiempo de servicio para cliente  76 :  10.172671478  minutos
Tiempo de servicio para cliente  77 :  9.98113825684  minutos
Tiempo de servicio para cliente  78 :  10.0675043483  minutos
Tiempo de servicio para cliente  79 :  10.0908487477  minutos
Tiempo de servicio para cliente  80 :  9.89542476388  minutos
Tiempo de servicio para cliente  81 :  10.0402433154  minutos
Tiempo de servicio para cliente  82 :  10.0210079295  minutos
Tiempo de servicio para cliente  83 :  9.9448987071  minutos
Tiempo de servicio para cliente  84 :  9.93712686961  minutos
Tiempo de servicio para cliente  85 :  10.0793344102  minutos
Tiempo de servicio para cliente  86 :  10.0390813526  minutos
Tiempo de servicio para cliente  87 :  10.0708098166  minutos
Tiempo de servicio para cliente  88 :  10.0262317766  minutos
Tiempo de servicio para cliente  89 :  10.0008542102  minutos
Tiempo de servicio para cliente  90 :  9.83825732013  minutos
Tiempo de servicio para cliente  91 :  9.94211564232  minutos
Tiempo de servicio para cliente  92 :  9.9081321381  minutos
Tiempo de servicio para cliente  93 :  9.97851166087  minutos
Tiempo de servicio para cliente  94 :  9.93620347424  minutos
Tiempo de servicio para cliente  95 :  9.97476950437  minutos
Tiempo de servicio para cliente  96 :  9.9871864267  minutos
Tiempo de servicio para cliente  97 :  9.90879430918  minutos
Tiempo de servicio para cliente  98 :  9.94725345771  minutos
Tiempo de servicio para cliente  99 :  9.99583813039  minutos
Tiempo de servicio para cliente  100 :  10.0032875802  minutos
Tiempo de servicio para cliente  101 :  9.9205858308  minutos
Tiempo promedio de servicio en  1  horas: 
10.0080194562  minutos
Tiempo promedio de servicio en  2  horas: 
10.0365813477  minutos
Tiempo promedio de servicio en  3  horas: 
9.99492783713  minutos
Tiempo promedio de servicio en  4  horas: 
9.95344629308  minutos
Tiempo promedio de servicio en  5  horas: 
10.0075820955  minutos
Tiempo promedio de servicio en  6  horas: 
10.0013781655  minutos
Tiempo promedio de servicio en  7  horas: 
10.0092528982  minutos
Tiempo promedio de servicio en  8  horas: 
10.0512109564  minutos
Tiempo promedio de servicio en  9  horas: 
9.98305775882  minutos
Tiempo promedio de servicio en  10  horas: 
9.96253074847  minutos
tiempo acumulado servicio por hora:  0.0
tiempo acumulado servicio por hora:  10.061325638
tiempo acumulado servicio por hora:  19.9841826742
tiempo acumulado servicio por hora:  29.9385391487
tiempo acumulado servicio por hora:  39.9448701022
tiempo acumulado servicio por hora:  50.0621366477
tiempo acumulado servicio por hora:  60.0919907409
Clientes atendidos en  1  horas:  5
tiempo acumulado servicio por hora:  0.0919907409231
tiempo acumulado servicio por hora:  10.0478711674
tiempo acumulado servicio por hora:  20.1745635442
tiempo acumulado servicio por hora:  30.084692047
tiempo acumulado servicio por hora:  40.0950912284
tiempo acumulado servicio por hora:  50.0936208239
tiempo acumulado servicio por hora:  60.146376008
Clientes atendidos en  2  horas:  6
tiempo acumulado servicio por hora:  0.146376007977
tiempo acumulado servicio por hora:  10.0880976941
tiempo acumulado servicio por hora:  20.1351075325
tiempo acumulado servicio por hora:  30.1770233752
tiempo acumulado servicio por hora:  40.08308683
tiempo acumulado servicio por hora:  50.1817264199
tiempo acumulado servicio por hora:  60.2589207716
Clientes atendidos en  3  horas:  6
tiempo acumulado servicio por hora:  0.25892077158
tiempo acumulado servicio por hora:  10.1744111425
tiempo acumulado servicio por hora:  20.1168459053
tiempo acumulado servicio por hora:  30.1872976001
tiempo acumulado servicio por hora:  40.274438343
tiempo acumulado servicio por hora:  50.2819314714
tiempo acumulado servicio por hora:  60.4587865561
Clientes atendidos en  4  horas:  6
tiempo acumulado servicio por hora:  0.458786556115
tiempo acumulado servicio por hora:  10.3339385517
tiempo acumulado servicio por hora:  20.1291006211
tiempo acumulado servicio por hora:  30.2093747418
tiempo acumulado servicio por hora:  40.0679941403
tiempo acumulado servicio por hora:  50.049208342
tiempo acumulado servicio por hora:  60.0305279417
Clientes atendidos en  5  horas:  6
tiempo acumulado servicio por hora:  0.0305279416577
tiempo acumulado servicio por hora:  10.0097761059
tiempo acumulado servicio por hora:  20.0385985322
tiempo acumulado servicio por hora:  30.1572261895
tiempo acumulado servicio por hora:  40.2606771
tiempo acumulado servicio por hora:  50.3087648919
tiempo acumulado servicio por hora:  60.2555594666
Clientes atendidos en  6  horas:  6
tiempo acumulado servicio por hora:  0.255559466602
tiempo acumulado servicio por hora:  10.3429104624
tiempo acumulado servicio por hora:  20.3739863914
tiempo acumulado servicio por hora:  30.3585764453
tiempo acumulado servicio por hora:  40.3356295326
tiempo acumulado servicio por hora:  50.3546970626
tiempo acumulado servicio por hora:  60.3015096035
Clientes atendidos en  7  horas:  6
tiempo acumulado servicio por hora:  0.30150960347
tiempo acumulado servicio por hora:  10.3201033214
tiempo acumulado servicio por hora:  20.4089184503
tiempo acumulado servicio por hora:  30.456688548
tiempo acumulado servicio por hora:  40.4064078819
tiempo acumulado servicio por hora:  50.4442846623
tiempo acumulado servicio por hora:  60.5535921889
Clientes atendidos en  8  horas:  6
tiempo acumulado servicio por hora:  0.553592188917
tiempo acumulado servicio por hora:  10.5854469767
tiempo acumulado servicio por hora:  20.657090927
tiempo acumulado servicio por hora:  30.6169686684
tiempo acumulado servicio por hora:  40.5493092899
tiempo acumulado servicio por hora:  50.5413444569
tiempo acumulado servicio por hora:  60.6961351463
Clientes atendidos en  9  horas:  6
tiempo acumulado servicio por hora:  0.696135146255
tiempo acumulado servicio por hora:  10.8250780709
tiempo acumulado servicio por hora:  20.8845068493
tiempo acumulado servicio por hora:  30.8026015201
tiempo acumulado servicio por hora:  40.6582752675
tiempo acumulado servicio por hora:  50.5415660615
tiempo acumulado servicio por hora:  60.597941564
Clientes atendidos en  10  horas:  6
tiempo acumulado servicio por hora:  0.597941564003
tiempo acumulado servicio por hora:  10.6165106395
tiempo acumulado servicio por hora:  20.7362556197
tiempo acumulado servicio por hora:  30.7715630875
tiempo acumulado servicio por hora:  40.7331724164
tiempo acumulado servicio por hora:  50.7896083253
tiempo acumulado servicio por hora:  60.9736631442
Clientes atendidos en  11  horas:  6
tiempo acumulado servicio por hora:  0.97366314421
tiempo acumulado servicio por hora:  10.954801401
tiempo acumulado servicio por hora:  21.0223057493
tiempo acumulado servicio por hora:  31.1131544971
tiempo acumulado servicio por hora:  41.008579261
tiempo acumulado servicio por hora:  51.0488225764
tiempo acumulado servicio por hora:  61.0698305058
Clientes atendidos en  12  horas:  6
tiempo acumulado servicio por hora:  1.06983050584
tiempo acumulado servicio por hora:  11.0069573754
tiempo acumulado servicio por hora:  21.0862917856
tiempo acumulado servicio por hora:  31.1253731383
tiempo acumulado servicio por hora:  41.1961829549
tiempo acumulado servicio por hora:  51.2224147315
tiempo acumulado servicio por hora:  61.2232689417
Clientes atendidos en  13  horas:  6
tiempo acumulado servicio por hora:  1.22326894168
tiempo acumulado servicio por hora:  11.165384584
tiempo acumulado servicio por hora:  21.0735167221
tiempo acumulado servicio por hora:  31.052028383
tiempo acumulado servicio por hora:  40.9882318572
tiempo acumulado servicio por hora:  50.9630013616
tiempo acumulado servicio por hora:  60.9501877883
Clientes atendidos en  14  horas:  6
tiempo acumulado servicio por hora:  0.950187788296
tiempo acumulado servicio por hora:  10.897441246
tiempo acumulado servicio por hora:  20.8932793764
tiempo acumulado servicio por hora:  30.8965669566
Clientes atendidos en  15  horas
4
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-9-45dc529da3f7> in <module>()
    138     simular(10)
    139 
--> 140 main()

<ipython-input-9-45dc529da3f7> in main()
    136 def main():
    137 
--> 138     simular(10)
    139 
    140 main()

<ipython-input-9-45dc529da3f7> in simular(n)
    118     print cantClientesAten
    119     numClientesAtendidos.append(cantClientesAten)
--> 120     for i in range(len(numClientesLlegadan)):
    121         print 'Tiempo promedio de llegadas en ',(i+1),' horas: ',((1.0/numClientesLlegada[i])*60.0),' minutos'
    122         tiempoLlegada.append((1.0/numClientesLlegada[i])*60.0)

NameError: global name 'numClientesLlegadan' is not defined

In [ ]: